package com.wongoing.bus.util;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import com.wongoing.sys.model.SysConfig;
import com.wongoing.util.LogService;

/**
 * 功能说明：业务常量定义类 、
 * 修改说明：
 * @author 吴兆强
 * @date 2018年1月11日 下午12:33:30
 * @version 0.1
 */
public class Constants extends com.wongoing.sys.util.Constants {

	/**
	 * 功能说明：获取系统配置项的值 
	 * 修改说明：
	 * @author 吴兆强
	 * @date 2018年1月11日 下午12:35:13
	 * @param configCode 项代码
	 * @return 返回对应配置项代码的值
	 */
	private static String getConfigVal(String configCode) {

		SysConfig config = SysConfig.allConfigs.get(configCode);

		if (config == null) {
			LogService.getInstance(Constants.class).error(
					"Config中找不到配置项, [configCode : " + configCode + "]");
			return null;
		}

		String val = config.getCfgValue();
		if (StringUtils.isBlank(val)) {
			LogService.getInstance(Constants.class).error(
					"Config中配置项的值为空, [configCode : " + configCode + "]");
			return null;
		}

		return val;
	}

	/**
	 * 功能说明：获取系统配置项名称 
	 * 修改说明：
	 * @author 吴兆强
	 * @date 2018年1月11日 下午12:37:21
	 * @param configCode 配置项代码
	 * @return 返回对应配置项代码的名称
	 */
	private static String getConfigName(String configCode) {

		SysConfig config = SysConfig.allConfigs.get(configCode);

		if (config == null) {
			LogService.getInstance(Constants.class).error(
					"Config中找不到配置项, [configCode : " + configCode + "]");
			return null;
		}

		String name = config.getCfgName();
		if (StringUtils.isBlank(name)) {
			LogService.getInstance(Constants.class).error(
					"Config中配置项的值为空, [configCode : " + configCode + "]");
			return null;
		}

		return name;
	}
	
	/**
	 * =========================================================================================================================== 
	 * =============================================== 框架配置项 START ============================================================
	 * ===========================================================================================================================
	 */

	/*=================================================== TOKEN ============================================*/
	
	/**
	 * 保存用户到SESSION
	 */
	public static String USER_SESSION = "USER_SESSION";

	/**
	 * 存储当前登录用户id的字段名
	 */
	public static final String CURRENT_USER_ID = "CURRENT_USER_ID";

	/**
	 * TOKEN 签发者
	 */
	public static final String JWT_ISSUER = "www.yeefeipass.com";

	/**
	 * TOKEN 密钥
	 */
	public static final String JWT_SECRET_KEY = getConfigVal("jwt_secret_key");

	/**
	 * token有效期
	 */
	public static final int JWT_EXPIRES_TIMES = NumberUtils.toInt(
			getConfigVal("jwt_expires_times"), 30) * 60 * 1000;
	public static final long JWT_APP_EXPIRES_TIMES = NumberUtils.toLong(
			getConfigVal("jwt_app_expires_times"), 30) * 60 * 1000;

	/**
	 * 存放Authorization的header字段
	 */
	public static final String AUTHORIZATION = "Authorization";
	public static final String XTOKEN = "x-token";

	/* ================================= 微信公众号（WeChat Public Account Setting) ===========================================*/
	/**
	 * 微信公众号开发者ID
	 */
	public static final String WEBCHAT_PUB_APPID = getConfigVal("webchat_pub_appid");
	/**
	 * 微信公众号开发者密码
	 */
	public static final String WEBCHAT_PUB_APPSECRET = getConfigVal("webchat_pub_appsecret");
	/**
	 * 微信公众号服务器令牌
	 */
	public static final String WEBCHAT_PUB_TOKEN = getConfigVal("webchat_pub_token");
	/**
	 * 微信公众号服务器加解密密钥
	 */
	public static final String WEBCHAT_PUB_ENCODINGAESKEY = getConfigVal("webchat_pub_encodingaeskey");
	
	/* ======================================================= 微信商户版支付（WebChat merchant） =================================================================== */
	/**
	 * 微信商户号
	 */
	public static final String WEBCHAT_MCH_ID = getConfigVal("webchat_mch_id");
	/**
	 * 微信商户私钥
	 */
	public static final String WEBCHAT_MCH_KEY = getConfigVal("webchat_mch_key");
	
	/* ======================================================= 微信H5（WebChat merchant） =================================================================== */
	/**
	 * APP调起微信支付时伪装Referer通过安全验证时使用，与微信商户平台中配置的url地址一样即可
	 */
	public static final String WEBCHAT_REFERER = getConfigVal("webchat_referer");
	/**
	 * 微信支付异步回调地址
	 */
	public static final String WEBCHAT_NOTIFY_URL = getConfigVal("webchat_notify_url");
	
	public static final String WEBCHAT_TRADE_TYPE_NATIVE = getConfigVal("webchat_trade_type_native");
	
	public static final String WEBCHAT_TRADE_TYPE_JSAPI = getConfigVal("webchat_trade_type_jsapi");
	
	public static final String WEBCHAT_TRADE_TYPE_MWEB = getConfigVal("webchat_trade_tyupe_mweb");
	
	public static final String WEBCHAT_DEVICE_INFO = getConfigVal("webchat_device_info");
	
	public static final String WEBCHAT_FEE_TYPE = getConfigVal("webchat_fee_type");
	
	
	/* ======================================================= 支付宝支付（Alipay Setting） ===============================================================*/
	/**
	 * 合作身份者ID，以2088开头由16位纯数字组成的字符串
	 */
	public static final String ALIPAY_PARTNER = getConfigVal("alipay_partner");
	/**
	 * 收款支付宝账号，一般情况下收款账号就是签约账号
	 */
	public static final String ALIPAY_SELLER_EMAIL = getConfigVal("alipay_seller_email");
	/**
	 * 商户的私钥
	 */
	public static final String ALIPAY_KEY = getConfigVal("alipay_key");
	/**
	 * 签名方式 不需修改
	 */
	public static final String ALIPAY_SIGN_TYPE = getConfigVal("alipay_sign_type");
	/**
	 * 支付宝 异步通知地址
	 */
	public static final String ALIPAY_NOTIFY_URL =  getConfigVal("alipay_notify_url");
	
	/*=========================================== 项目上传图片路径分离设置=========================================================*/
	/**
	 * 图片地址
	 */
	public static final String IMG_UPLOAD_BASE = getConfigVal("img_upload_base");
	
	/*=========================================== 极光推送相关设置 =========================================================*/
	/**
	 * 极光推送appkey
	 */
	public static final String JPUSH_APPKEY = getConfigVal("jpush_appkey");
	/**
	 * 极光推送密钥
	 */
	public static final String JPUSH_MASTERSECRET = getConfigVal("jpush_mastersecret");
	
	/*=========================================== 其他  =========================================================*/
	/**
	 *  系统数据状态
	 */
	public static String IS_DATA_STATUS = "0";
	public static String IS_NOT_DATA_STATUS = "1";
	
	/**
	 * 项目域名
	 */
	public static String BASE_URL = getConfigVal("base_url");
	
	/**
	 * web站点域名
	 */
	public static String SITE_BASE_URL = getConfigVal("site_base_url");
	

	// 男女
	public static Integer MAN = 1;
	public static Integer WOMAN = 2;
	// 是否成功
	public static int IS_SUCCESS = 0;
	public static int IS_NOT_SUCCESS = 1;

	// 是 否
	public static int IS_YES = 0;
	public static int IS_NOT = 1;
	

	// 订单号生成列表标识(用于生成序列号)
	public static Integer ORDER_NORMAL = 1;
	public static Integer ORDER_REFUND = 2;
	public static Integer ORDER_REFUND_ALIAY = 3;
	
	// 订单相关静态常量ORDER_STATUS_ENABLE
	// 支付方式 等同退款方式
	public static String PAY_WAY_ALIPAY = "alipay"; // 支付宝支付
	public static String PAY_WAY_WEIXIN = "weixin"; // 微信支付
	public static String PAY_WAY_UNIOIN_PAY = "unionpay";// 银联支付
	/**
	 * =========================================================================================================================== 
	 * =============================================== 框架配置项 END ============================================================
	 * ===========================================================================================================================
	 */
	

	/**
	 * =========================================================================================================================== 
	 * =============================================== 业务类常量 ============================================================
	 * ===========================================================================================================================
	 */

	
}
